<?Php
    
// блок свичей для всего, что касается админских операций


switch ($request['action']){
    
    // работаем со списком плагинов (установить-удалить, включить-выключить)
    case 'updatePlugins':
        
        // читаем из БД информацию об установленных плагинах
        $pls = select_data( $pdo, DB_MODEL_PLUGINS, '*', '1', '', 0, '', '', '', DEBUG_MODE, true );
        foreach($pls as $v)$plugins[$v['title']] = $v;
        
        // устаналиваем/удаляем, включаем/выключаем имеющиеся плагины
        foreach($plugins as $k=>$v)if (file_exists($v['folder'].DIRECTORY_SEPARATOR.'config.inc')){
            if ($request['installedPlugins'][$v['id']]){ // плагин установлен
                if ($v['installed']==0){ // ...а не был, т.е. устанавливаем
                    //insert_into($pdo, DB_MODEL_PRIVILEGES, array('action'=>'admin_plugin_' . $v['id'], 'privileges'=>2));
                    require_once($v['folder'].DIRECTORY_SEPARATOR.'config.inc');
                    
                    if ($cnf['installSql']){
                        if (floatval(phpversion()) >= 5.3)$pdo -> query($cnf['installSql']);
                        else { $e = explode(';',$cnf['installSql']); foreach ($e as $q)$pdo -> exec($q); }
                    }
                    if (is_array($cnf['defines']))foreach($cnf['defines'] as $g=>$w){
                        $arr = array('define_title'=>$g, 'define_value'=>$w, 'plugin_id'=>$v['id']);
                        insert_into($pdo, DB_MODEL_DEFINES, $arr);
                    }
                    if (is_array($cnf['pages']))foreach($cnf['pages'] as $g=>$w){
                        $w['plugin_id'] = $v['id'];
                        insert_into($pdo, DB_MODEL_PAGES, $w );
                    }
                    if (is_array($cnf['actions']))foreach($cnf['actions'] as $g=>$w){
                        $w['plugin_id'] = $v['id'];
                        insert_into($pdo, DB_MODEL_ACTIONS, $w );
                    }
                    
                    update_table($pdo, DB_MODEL_PAGES, array('enabled'=>0), "plugin_id={$v['id']}");
                    update_table($pdo, DB_MODEL_ACTIONS, array('enabled'=>0), "plugin_id={$v['id']}");
                    update_table($pdo, DB_MODEL_PLUGINS, array('installed'=>1), "id={$v['id']}");
                }
                
                if ($request['enabledPlugins'][$v['id']]){ // плагин включён
                    if ($v['enabled']==0){ // ...а не был, т.е. включаем
                        update_table($pdo, DB_MODEL_PAGES, array('enabled'=>1), "plugin_id={$v['id']}");
                        update_table($pdo, DB_MODEL_ACTIONS, array('enabled'=>1), "plugin_id={$v['id']}");
                        update_table($pdo, DB_MODEL_PLUGINS, array('enabled'=>1), "id={$v['id']}");
                    }
                }
                else { // плагин выключен
                    if ($v['enabled']==1){ // ...а был включён, т.е. выключаем
                        update_table($pdo, DB_MODEL_PAGES, array('enabled'=>0), "plugin_id={$v['id']}");
                        update_table($pdo, DB_MODEL_ACTIONS, array('enabled'=>0), "plugin_id={$v['id']}");
                        update_table($pdo, DB_MODEL_PLUGINS, array('enabled'=>0), "id={$v['id']}");
                    }
                }
            }
            else { // плагин не установлен
                if ($v['installed']==1){ // ...а был, т.е. удаляем
                    require_once($v['folder'].DIRECTORY_SEPARATOR.'config.inc');
                    if ($cnf['deinstallSql']){
                        if (floatval(phpversion()) >= 5.3)$pdo -> query($cnf['deinstallSql']);
                        else { $e = explode(';',$cnf['deinstallSql']); foreach ($e as $q)$pdo -> exec($q); }
                    }
                    $e = $pdo -> query("DELETE FROM ".DB_MODEL_DEFINES." WHERE `plugin_id`='{$v['id']}'");
                    $e = $pdo -> query("DELETE FROM ".DB_MODEL_ACTIONS." WHERE `plugin_id`='{$v['id']}'");
                    $e = $pdo -> query("DELETE FROM ".DB_MODEL_PAGES." WHERE `plugin_id`='{$v['id']}'");
                    $e = $pdo -> query("DELETE FROM ".DB_MODEL_PRIVILEGES." WHERE `plugin_id`='{$v['id']}'");
                    update_table($pdo, DB_MODEL_PLUGINS, array('installed'=>0, 'enabled'=>0), "id={$v['id']}");
                }
            }
        }
        go_to('/admin/modules');
    break;
    
    
    
    // редактируем плагин (права доступа)
    case 'editModule':
        $id=$request['id'];
        
        $e = $pdo -> query("DELETE FROM ".DB_MODEL_PRIVILEGES." WHERE `plugin_id`='{$id}' AND `action` LIKE 'access_%'");
        $e = select_data($pdo, DB_MODEL_USERS); foreach ($e as $v)$users[$v['email']]=$v['id'];
        
        $admins=getUsersListByEmail($request['adminEmails'], $users);
        $access=getUsersListByEmail($request['accessEmails'], $users);
        
        
        switch ($request['accessUsers']){
            case 'nobody':
            break;
            case 'all':
                $e = $pdo -> query("REPLACE INTO ".DB_MODEL_PRIVILEGES." (`user_id`, `action`, `plugin_id`, `privileges`) VALUES (NULL, 'access_all', '{$id}', '1')");
            break;
            case 'registered':
                $e = $pdo -> query("REPLACE INTO ".DB_MODEL_PRIVILEGES." (`user_id`, `action`, `plugin_id`, `privileges`) VALUES (NULL, 'access_regged', '{$id}', '1')");
            break;
            case 'emails':
                foreach($access as $v)
                    $e = $pdo -> query("REPLACE INTO ".DB_MODEL_PRIVILEGES." (`user_id`, `action`, `plugin_id`, `privileges`) VALUES ('{$v}', 'access_user', '{$id}', '1')");
            break;
        }
        
        
        switch ($request['adminUsers']){
            case 'nobody':
            break;
            case 'all':
                $e = $pdo -> query("REPLACE INTO ".DB_MODEL_PRIVILEGES." (`user_id`, `action`, `plugin_id`, `privileges`) VALUES (NULL, 'access_all', '{$id}', '2')");
            break;
            case 'registered':
                $e = $pdo -> query("REPLACE INTO ".DB_MODEL_PRIVILEGES." (`user_id`, `action`, `plugin_id`, `privileges`) VALUES (NULL, 'access_regged', '{$id}', '2')");
            break;
            case 'emails':
                foreach($admins as $v)
                    $e = $pdo -> query("REPLACE INTO ".DB_MODEL_PRIVILEGES." (`user_id`, `action`, `plugin_id`, `privileges`) VALUES ('{$v}', 'access_user', '{$id}', '2')");
            break;
        }
        
        foreach($request['defines'] as $k=>$v){
            update_table($pdo, DB_MODEL_DEFINES, array('define_value'=>$v), "`define_title`='{$k}' AND `plugin_id`='{$id}'", true);
        }
        
        go_to('/admin/modules/edit/'.$id);
    break;
    
    
    // получаем список пользователей для всплывающей подсказки
    case 'getUsers':
        $e = select_data($pdo, DB_MODEL_USERS, '*', "`email` LIKE '%{$request['q']}%'");
        foreach($e as $v)echo $v['email'].'|'.$v['id']."\r\n";
    break;
    
    
}



// получаем массив id пользователей по списку е-мейлов
function getUsersListByEmail($in, $users){
    $in = str_replace("\r\n",',',$in); $in = str_replace(" ",',',$in);
    $in = explode(',',$in);
    
    foreach($in as $v)if ($users[$v])$arr[]=$users[$v];
    
    return $arr;
}


?>